package lib.rv.ap

import androidx.annotation.LayoutRes
import androidx.databinding.ViewDataBinding

/**
 * 同一种ViewType的每个Item对View的处理委托（接口）。一种 viewType 对应一个 ViewTypeDelegate 对象。
 */
interface ViewTypeDelegate<V : ViewDataBinding, M : IViewTypeModel>{
    /**
     * viewType满足某添加后委托生效。使用时写跟 M 的 getViewType() 值相同。
     * @return viewType。
     */
    @LayoutRes
    fun getViewType(): Int

    /**
     * 当创建ViewHolder时。做什么事。
     * @param binding ViewDataBinding
     */
    fun onCreateVH(binding: V)

    /**
     * 当Bind ViewHolder时。做什么事。
     * @param binding ViewDataBinding
     * @param m 具体的Model。
     */
    fun onBindVH(binding: V, m: M)
}